package com.rb.util;

import java.util.HashMap;
import java.util.Map;

import net.sf.json.JSONObject;

/**
 * @author 作者 :ZYY
 * @version 创建时间：2016年12月16日 上午11:25:29 类说明 用于处理手机端和机器人端认证请求，以及数据验证
 */
public class ParseJson {
	/**
	 * 解析客户端传递的json数据并提取需要的数据 校验json数据格式、类型、大小以及内容是否合法
	 * 返回底层接口需要的map类型的数据
	 * 有些验证应该是前台做的事，此处默认前台什么验证都没做，只传递数据
	 */

	// 解析、提取json数据,参数是报刊json key的字符串数组和json数据的string类型的字符串
	public static Map<String, Object> parse(String[] str, String jString) {
		// 定义返回的map类型数据
		Map<String, Object> map = new HashMap<>();
		// 加入try-catch，如果json为空，json数据为空
		try {
			JSONObject json = JSONObject.fromObject(jString);
			// json数据正确标志
			map.put("flag", true);
			for (int i = 0; i < str.length; i++) {
				// 循环取出json中的数据，并将数据放入map中
				String value = json.getJSONObject("data").getString(str[i]);
				map.put(str[i], value);
			}
		} catch (Exception e) {
			// json数据错误标志
			map.put("flag", false);
		}
		return map;
	}

	/*登录
	 * 默认手机号格式前台没验证
	 * 默认密码格式前台没验证
	 * */
	public static Map<String, Object> login(String jString) {
		// 定义返回的map类型数据
		Map<String, Object> map = new HashMap<>();
		String[] str = { "mobile", "password" };
		map = parse(str, jString);
		if ((boolean) map.get("flag")) {

		}
		return map;
	}

	// 注册第一步，验证手机号
	public static Map<String, Object> register1(String jString) {
		// 定义返回的map类型数据
		Map<String, Object> map = new HashMap<>();
		String[] str = { "mobile" };
		map = parse(str, jString);
		// 校验手机号
		if ((boolean) map.get("flag")) {
			boolean t = RegexUtils.isPhoneLegal(map.get("mobile").toString());
			// 正确：flag==true,错误：flag==false
			map.put("flag", t);
		}
		return map;
	}

	// 注册第二步，验证密码内容，用户昵称
	public static Map<String, Object> register2(String jString) {
		// 定义返回的map类型数据
		Map<String, Object> map = new HashMap<>();
		String[] str = { "mobile", "password", "auth_code", "nickname","head_name","head" };
		map = parse(str, jString);
		if ((boolean) map.get("flag")) {
			boolean t = RegexUtils.isPhoneLegal(map.get("mobile").toString());
			//boolean c = RegexUtils.isChinese(map.get("nickname").toString());
			boolean a = RegexUtils.isMath(map.get("auth_code").toString());
			map.put("password", TransactSQLInjection(map.get("password").toString()));
			map.put("flag", t&a);
		}
		return map;
	}
	// 主人注册
	public static Map<String, Object> masterR(String jString) {
		// 定义返回的map类型数据
		Map<String, Object> map = new HashMap<>();
		String[] str = { "mobile", "password", "uid", "nickname","auth_code" };
		map = parse(str, jString);
		if ((boolean) map.get("flag")) {
			boolean t = RegexUtils.isPhoneLegal(map.get("mobile").toString());
			//boolean c = RegexUtils.isChinese(map.get("nickname").toString());
			map.put("password", TransactSQLInjection(map.get("password").toString()));
			map.put("uid", TransactSQLInjection(map.get("uid").toString()));
			map.put("flag", t);
		}
		return map;
	}
	//其他操作
	public static Map<String, Object> otherDo(String jString,String[] str) {
		// 定义返回的map类型数据
		Map<String, Object> map = new HashMap<>();
		map = parse(str, jString);
		if ((boolean) map.get("flag")) {
			for (int i = 0; i < str.length; i++) {
				map.put(str[i], TransactSQLInjection(map.get(str[i]).toString()));
			}
		}
		return map;
	}

	// 替换非法字符
	public static String TransactSQLInjection(String str) {
		return str.replaceAll(".*([';]+|(--)+).*", " ");
		// 我认为 应该是return str.replaceAll("([';])+|(--)+","");

	}

}
